//package com.johnny.xia.util;
//
//import com.google.common.collect.Sets;
//import freemarker.template.Configuration;
//import freemarker.template.Template;
//
//import java.io.*;
//import java.lang.reflect.Field;
//import java.lang.reflect.Method;
//import java.net.URL;
//import java.net.URLClassLoader;
//import java.util.HashMap;
//import java.util.Set;
//import java.util.Stack;
//
///**
// * @ClassName TestMain
// * @Author johnny xia
// * @mailto johnny.xia@qq.com
// * @Date 2020/11/27 11:24 下午
// * @Description TODO
// **/
//public class TestMain {
//
//    public static void main(String[] args) {
//        try {
//            Set<Class<?>> classes = loadClasses("/Users/johnny/Documents/project/bz/nike-project/nike-pim/nike-pim-service/target/classes/com/baozun/psdross/nikepim/service/dao/entity");
//            System.out.println(classes.size());
//
//            for(Class<?> cla : classes){
//                Method[] methods = cla.getMethods();
//
//                Field[] fields = cla.getDeclaredFields();
//
//                System.out.println("-=================:"+cla.getName());
//                for(Field field : fields){
//                    System.out.println(field.getName()+"--"+field.getGenericType().getTypeName());
//                }
////                for(Method method : methods){
////                    System.out.println(method.getName());
////                }
//
//                // step1 创建freemarker.template.Configuration配置实例
//                Configuration configuration = new Configuration(Configuration.VERSION_2_3_22);
//                Template temp = configuration.getTemplate("/Users/johnny/Documents/project/bz/nike-project/nike-pim/nike-pim-service/src/main/resources/entity.ftl");
//                //创建输出流，定义输出的文件
//                File docFile = new File("demo.xml");
//                BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(docFile)));
////process方法将数据与模板进行绑定，输出到out输出流
//                temp.process(new HashMap<>(), out);
//
//
//
//
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//
//
//    }
//
//    public static Set<Class<?>> loadClasses(String rootClassPath) throws Exception {
//        Set<Class<?>> classSet = Sets.newHashSet();
//        // 设置class文件所在根路径
//        File clazzPath = new File(rootClassPath);
//
//        // 记录加载.class文件的数量
//        int clazzCount = 0;
//
//        if (clazzPath.exists() && clazzPath.isDirectory()) {
//            // 获取路径长度
//            int clazzPathLen = clazzPath.getAbsolutePath().length() + 1;
//
//            Stack<File> stack = new Stack<>();
//            stack.push(clazzPath);
//
//            // 遍历类路径
//            while (!stack.isEmpty()) {
//                File path = stack.pop();
//                File[] classFiles = path.listFiles(new FileFilter() {
//                    public boolean accept(File pathname) {
//                        //只加载class文件
//                        return pathname.isDirectory() || pathname.getName().endsWith(".class");
//                    }
//                });
//                if (classFiles == null) {
//                    break;
//                }
//                for (File subFile : classFiles) {
//                    if (subFile.isDirectory()) {
//                        stack.push(subFile);
//                    } else {
//                        if (clazzCount++ == 0) {
//                            Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
//                            boolean accessible = method.isAccessible();
//                            try {
//                                if (!accessible) {
//                                    method.setAccessible(true);
//                                }
//                                // 设置类加载器
//                                URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
//                                // 将当前类路径加入到类加载器中
//                                method.invoke(classLoader, clazzPath.toURI().toURL());
//                            } catch (Exception e) {
//                                e.printStackTrace();
//                            } finally {
//                                method.setAccessible(accessible);
//                            }
//                        }
//                        // 文件名称
//                        String className = subFile.getAbsolutePath();
//                        className = className.substring(clazzPathLen, className.length() - ".class".length());
//                        //将/替换成. 得到全路径类名
//                        className = className.replace(File.separatorChar, '.');
//                        // 加载Class类
//                        Class<?> aClass = Class.forName("com.baozun.psdross.nikepim.service.dao.entity."+className);
//                        classSet.add(aClass);
//                        System.out.println("读取应用程序类文件[class={" + className + "}]");
//                    }
//                }
//            }
//        }
//        return classSet;
//    }
//}
